<?php

namespace app\admin\model\manufacture;

use think\Model;

class Material extends Model
{
    // 表名
    protected $name = 'manufacture_material';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    
    // 追加属性
    protected $append = [
        'status_text'
    ];
    
    // 状态
    public function getStatusList()
    {
        return [
            '1' => __('启用'),
            '0' => __('停用')
        ];
    }

    public function getStatusTextAttr($value, $data)
    {
        $value = $value ? $value : $data['status'];
        $list = $this->getStatusList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    // 关联物料分类
    public function category()
    {
        return $this->belongsTo('MaterialCategory', 'category_id', 'id');
    }

    // 关联库存
    public function stocks()
    {
        return $this->hasMany('Stock', 'material_id', 'id');
    }

    // 关联BOM明细
    public function bomDetails()
    {
        return $this->hasMany('BomDetail', 'material_id', 'id');
    }

    // 获取总库存数量
    public function getTotalStockAttr($value, $data)
    {
        return $this->stocks()->sum('quantity');
    }

    // 获取库存预警状态
    public function getStockWarningAttr($value, $data)
    {
        $totalStock = $this->total_stock;
        if ($data['min_stock'] > 0 && $totalStock <= $data['min_stock']) {
            return 'low'; // 库存不足
        }
        if ($data['max_stock'] > 0 && $totalStock >= $data['max_stock']) {
            return 'high'; // 库存过高
        }
        return 'normal'; // 正常
    }

    // 获取库存预警文本
    public function getStockWarningTextAttr($value, $data)
    {
        $warning = $this->stock_warning;
        switch ($warning) {
            case 'low':
                return '库存不足';
            case 'high':
                return '库存过高';
            default:
                return '正常';
        }
    }
}
